//
//  YHHomeVC.swift
//  XLWB
//
//  Created by key on 16/6/25.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit

private let cellId = "supCell"

class YHHomeVC: YHPublicVC, UITableViewDelegate, UITableViewDataSource {

    //创建tableview
    var tableView: UITableView?
    
    //定义数组 存储首页数据
    var homeListArray: [YHHomeList] = [YHHomeList]()
    
    //MARK: - 下拉刷新 刷新最新
    let refresh: YHRefreshControl = YHRefreshControl()
    
    //MARK: - 懒加载 刷新菊花
    private lazy var activity: UIActivityIndicatorView = {
        
        let act = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        
        act.color = themeColor
        
        return act
    }()
    
    //刷新微博条数 显示
    private lazy var pullLabel: UILabel = {
        
        let lab = UILabel(textFont: 15, textColor: UIColor.whiteColor())
        
        lab.textAlignment = .Center
        
        lab.backgroundColor = themeColor
        
        lab.frame = CGRect(x: 0, y: 64 - 34, width: screenW, height: 34)
       
        lab.alpha = 0
        
        return lab
        
    }()
    
    
    //MARK: 本类入口 viewDidLoad
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //设置导航条
        navigationItem.title = "主页"
        
        
        //判断用户是否登陆
        if !islogin {
            
            //用户未登陆 加载普通View
            VisitorView?.setDataToView(nil, imgName: nil)

        }else{
            
            //用户登陆 加载TableView
            loadTableView()
            
        }
 
    }
    
    
    
    //MARK: - 获取首页数据
    func getHomeList(pullUp: Bool) {
        
        //需要传递的两个上拉 下拉属性请求数据  参数
        /*
        since_id	false	int64	若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。
        max_id	false	int64	若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
        
        如果 下拉刷新 max_id = 0 代表我要拿时间最新的微博
        如果 上拉加载更多 since_id = 0 代表我要拿时间更早的微博
        */
        var since_id: Int64 = 0
        var max_id: Int64 = 0
        
        
        //逻辑
        /*
            如果菊花动画未开启 则表示还未开始上拉加载更多操作
            如果菊花动画已开启 则表示已经开始上拉加载更多操作
        */
        
        if pullUp { //开启则执行里面代码块
                
            //上拉刷星 加载更多
            max_id = self.homeListArray.last?.id ?? 0
            
            //判断 由于max_id 返回ID小于或等于max_id的微博 有等于 所以为了加载浪费 不必加载等于的数据 所以要减去等于的数据  但是如果max_id <= 0  再减1 就得负数了 不和常理 所以进行判断
            if max_id > 0 {
                
                max_id -= 1
            }

 
        }else{//未开启
            
            // 菊花动画未开启  表示还没有开始进行下拉刷新 
            //情况一 第一次加载数据
            //情况二 正在进行下拉刷新  刷新最新数据
            
            //根据API接口说明 当since_id 和 max_id 都为 0 时 表示参数值传递了 token
            //当max_id == 0  since_id 为一值时  表示要获取最新数据 最新的数据id 大于 since_id
            
            //第一次加载  数组还未有值  数据0
            //下拉刷新 数组中一定有数据 这时 可以获得最新微博的id 赋值给since_id
            
            since_id =  homeListArray.first?.id ?? 0
            
        }
        
        //调用模型数据方法 获取数据
        YHHomeList().loadHomeList(since_id, max_id: max_id, homeListArr: { (homeListArr) -> () in
            
            //延迟
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
                
                //关闭菊花动画
                self.activity.stopAnimating()
                //关闭refresh动画
                self.refresh.endRefreshing()
                
                
                if pullUp {
                    //上拉刷新
                    self.homeListArray = self.homeListArray + homeListArr
                    
                }else{
                    //下拉刷新 或者 第一次加载
                    self.homeListArray = homeListArr + self.homeListArray
                    
                    //调用 显示刷新多少条
                    self.loadPullLabel(homeListArr.count)
                    
                }
                
                self.tableView?.reloadData()
                
            })
            
            
            }) { (error) -> () in
                
                //关闭菊花动画
                self.activity.stopAnimating()
                //关闭refresh动画
                self.refresh.endRefreshing()
                
                
        }
        
        
    }
    
    
    //MARK: - 加载微博条数 pullLabel
    func loadPullLabel(count: Int) {
        
        //判断当前是否有添加pullLabel
        if pullLabel.superview == nil { //没有父控件  表示未添加
            
            //添加 第一次
            navigationController!.view.insertSubview(pullLabel, belowSubview: navigationController!.navigationBar)
            
        }
        
        //设置文字
        if count > 0 {
            
            pullLabel.text = "刷新\(count)条数据"
        }else{
            
            pullLabel.text = "当前已是最新数据"
        }
        
        //动画 显示
        UIView.animateKeyframesWithDuration(1.0, delay: 0.5, options: [], animations: { () -> Void in
            
            self.pullLabel.alpha = 1
            
            self.pullLabel.transform = CGAffineTransformMakeTranslation(0, 34)
            
            }) { (_) -> Void in
                
                
                UIView.animateWithDuration(1.0, delay: 2, options: [], animations: { () -> Void in
                    
                    self.pullLabel.transform = CGAffineTransformMakeTranslation(0, -34)
                    
                    }, completion: { (_) -> Void in
                        
                        self.pullLabel.alpha = 0
                })
                
                
                
        }
        
        
    }
    
    
    //MARK: - 加载TableView
    @objc private func loadTableView() {
    
        
        //获取首页数据
        getHomeList(activity.isAnimating())
        
        //创建tableView
        tableView = UITableView(frame: view.bounds)
        
        view.addSubview(tableView!)
        
        //设置代理
        tableView!.delegate = self
        tableView!.dataSource = self
        
        
        //注册cell
        tableView?.registerClass(YHHomeCell.self, forCellReuseIdentifier: cellId)
        
        //设置行高
        tableView?.estimatedRowHeight = 200 //预估的行高
        tableView?.rowHeight = UITableViewAutomaticDimension // 让 cell 自动计算高度
        

        //设置分割线样式
        tableView?.separatorStyle = .None
        
        
        //设置FooterView
        tableView?.tableFooterView = activity
        
        
        //添加下拉刷新最新到tableView
        tableView?.addSubview(refresh)
        
        //添加响应事件到refresh上
        refresh.addTarget(self, action: "refreshAction", forControlEvents: UIControlEvents.ValueChanged)
        
    }
    
    //MARK: - 下拉更新 refresh 刷新
    @objc private func refreshAction() {
        
        //加载数据
        getHomeList(activity.isAnimating())
        
    }
    
    
}




//MARK: - 遵循协议实现数据源方法
extension YHHomeVC {
    
    //组
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        
        return 1
        
    }
    
    //行
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return self.homeListArray.count ?? 0
    
    }
    
 
    //cell
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath)
            as! YHHomeCell
        
        cell.status = self.homeListArray[indexPath.row]
        
        //背景颜色
        cell.backgroundColor = RGB(237, green: 237, blue: 237)
        
        return cell
    }
    
    
    //监听滚动到哪里 下拉刷新
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        //判断是否滚动到了最后 并且 菊花动画是否开启 未开启表示还没加载 进入代码内进行加载
        if self.homeListArray.count == indexPath.row + 1 && !activity.isAnimating() {
            
//            print(self.homeListArray.count)
            
            //开启菊花动画
            activity.startAnimating()
            
            //刷新数据
            getHomeList(activity.isAnimating())
            
        }
        
        tableView.resignFirstResponder()
    }
    
    
}
